


#include <iostream>
#include <boost/spirit.hpp>
using namespace std;
using namespace boost::spirit;



/********************************************************************************************************************************
 *
 *     解析成功！接下来我们就把里面的数字取出来，解析器重载了[]操作符，在这里可以放入函数或函数对象，放在这里面的函数或函数对象在Spirit里称之为Actor
    对于real_p，它要求形式为:void func(double v)的函数或函数对象，下面我们就来取出这些数字：
 *
 *********************************************************************************************************************************/

//定义函数作为解析器的Actor
void showreal(double v)
{
    cout << "real is: " << v << endl;
}
int main()
{

    std::cout<<"parsing: call back"<<std::endl;

    //用于解析的字符串
    const char *szNumberList = "12.4,1000,-1928,33,30";
    //加入函数
    parse_info<> r = parse( szNumberList, real_p[&showreal] % ',' );
    cout << "parsed " << (r.full?"successful":"failed") << endl;
    cout << szNumberList << endl;
    //使用parse_info::stop确定最后解析的位置便于查错
    cout << string(r.stop - szNumberList, ' ') << '^' << endl;
    return 0;
}


